CentOS 7
Sponsored Link

OpenShift Origin 3.7 : Deploy Docker Registry
2018/02/07
 
Deploy Docker Registry.
If you installed OpenShift Origin like here, a Registry Pod has already been deployed and running, but if you'd like to change settings of the Pod like storage, configute like follows.
It's possbile to use OpenStack Swift or Google Storage, Microsoft Azure for Storage of the Registry, but on this example, set Filesystem for it.
This example is based on the environment like follows.
-----------+-----------------------------------------------------------+------------
           |10.0.0.30                    |10.0.0.51                    |10.0.0.52
+----------+-----------+      +----------+-----------+      +----------+-----------+
|  [  dlp.srv.world ]  |      | [ node01.srv.world ] |      | [ node02.srv.world ] |
|     (Master Node)    |      |    (Compute Node)    |      |    (Compute Node)    |
|     (Compute Node)   |      |                      |      |                      |
+----------------------+      +----------------------+      +----------------------+

[1] Delete default Registry settings.
[origin@dlp ~]$
oc get pods

NAME                       READY     STATUS    RESTARTS   AGE
docker-registry-1-qjkzk    1/1       Running   1          1h
registry-console-1-jx2zv   1/1       Running   1          1h
router-1-btps5             1/1       Running   1          1h

[origin@dlp ~]$
oc describe pod docker-registry-1-qjkzk | grep -A3 'Volumes:'

Volumes:
  registry-storage:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:

[origin@dlp ~]$
oc delete all -l docker-registry=default

deploymentconfig "docker-registry" deleted
pod "docker-registry-1-qjkzk" deleted

[origin@dlp ~]$
oc delete all -l app=registry-console

imagestream "registry-console" deleted
deploymentconfig "registry-console" deleted
pod "registry-console-1-jx2zv" deleted
service "registry-console" deleted

[origin@dlp ~]$
oc delete serviceaccount registry

serviceaccount "registry" deleted
[origin@dlp ~]$
oc delete service docker-registry

service "docker-registry" deleted
[origin@dlp ~]$
oc delete oauthclients cockpit-oauth-client

oauthclient "cockpit-oauth-client" deleted
[origin@dlp ~]$
oc get pods

NAME             READY     STATUS    RESTARTS   AGE
router-1-btps5   1/1       Running   1          1h
[2] Create a directory for Container Images on Master Node and configure Registry.
# Create a directory for Images (any place you like)

[origin@dlp ~]$
sudo mkdir /var/lib/origin/registry

[origin@dlp ~]$
sudo chown origin. /var/lib/origin/registry
# set privilege to the [registry] account

[origin@dlp ~]$
oadm policy add-scc-to-user privileged system:serviceaccount:default:registry

scc "privileged" added to: ["system:serviceaccount:default:registry"]
# deploy Registry

[origin@dlp ~]$
sudo oadm registry \
--config=/etc/origin/master/admin.kubeconfig \
--service-account=registry \
--images='openshift/origin-docker-registry' \
--mount-host=/var/lib/origin/registry \
--selector="region=infra" \
--replicas=1

--> Creating registry registry ...
    serviceaccount "registry" created
    clusterrolebinding "registry-registry-role" created
    deploymentconfig "docker-registry" created
    service "docker-registry" created
--> Success

# few minutes later, deploy has finished and Pod becomes running state

[origin@dlp ~]$
oc get pods

NAME                      READY     STATUS    RESTARTS   AGE
docker-registry-1-95lsw   1/1       Running   0          55s
router-1-btps5            1/1       Running   1          17h

[origin@dlp ~]$
oc describe pod docker-registry-1-95lsw

Name:           docker-registry-1-95lsw
Namespace:      default
Node:           dlp.srv.world/10.0.0.30
Start Time:     Fri, 08 Feb 2018 19:30:28 +0900
Labels:         deployment=docker-registry-1
                deploymentconfig=docker-registry
                docker-registry=default
Annotations:    kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicationController","namespace":"default","name":"docker-registry-1","uid":"6b94e04e-0d30-11e8-8fa8-525...
                openshift.io/deployment-config.latest-version=1
                openshift.io/deployment-config.name=docker-registry
                openshift.io/deployment.name=docker-registry-1
                openshift.io/scc=privileged
Status:         Running
IP:             10.129.0.15
Created By:     ReplicationController/docker-registry-1
Controlled By:  ReplicationController/docker-registry-1
Containers:
  registry:
    Container ID:       docker://ccb51a2e6186c83c178f0d2d08ccc519cc5caf31196d314f7243295936b21313
    Image:              openshift/origin-docker-registry
    Image ID:           docker-pullable://docker.io/openshift/origin-docker-registry@sha256:1d9da3c66a8d496e9ab0ff34967f62d577e2cab38a6ac6071cdd8e8ccb61389b
    Port:               5000/TCP
    State:              Running
      Started:          Fri, 08 Feb 2018 19:30:59 +0900
    Ready:              True
    Restart Count:      0
    Requests:
      cpu:      100m
      memory:   256Mi
    Liveness:   http-get http://:5000/healthz delay=10s timeout=5s period=10s #success=1 #failure=3
    Readiness:  http-get http://:5000/healthz delay=0s timeout=5s period=10s #success=1 #failure=3
    Environment:
      REGISTRY_HTTP_ADDR:                                       :5000
      REGISTRY_HTTP_NET:                                        tcp
      REGISTRY_HTTP_SECRET:                                     pzGkgYI9NwU/rxs/JlESoRT0uHrpG4k9jH3N6Lw4dJc=
      REGISTRY_MIDDLEWARE_REPOSITORY_OPENSHIFT_ENFORCEQUOTA:    false
    Mounts:
      /registry from registry-storage (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from registry-token-48jr9 (ro)
Conditions:
  Type          Status
  Initialized   True
  Ready         True
  PodScheduled  True
Volumes:
  registry-storage:
    Type:       HostPath (bare host directory volume)
    Path:       /var/lib/origin/registry
  registry-token-48jr9:
    Type:       Secret (a volume populated by a Secret)
    SecretName: registry-token-48jr9
    Optional:   false
QoS Class:      Burstable
Node-Selectors: region=infra
.....
.....
[3] Make sure to deploy a test application to be able to use Registry normally.
[cent@dlp ~]$
oc login

Authentication required for https://dlp.srv.world:8443 (openshift)
Username: cent
Password:
Login successful.

You don't have any projects. You can try to create a new project, by running

    oc new-project <projectname>

[cent@dlp ~]$
oc new-project test-project

Now using project "test-project" on server "https://dlp.srv.world:8443".

You can add applications to this project with the 'new-app' command. For example, try:

    oc new-app centos/ruby-22-centos7~https://github.com/openshift/ruby-ex.git

to build a new example application in Ruby.

[cent@dlp ~]$
oc new-app centos/ruby-22-centos7~https://github.com/openshift/ruby-ex.git

--> Creating resources ...
    imagestream "ruby-22-centos7" created
    imagestream "ruby-ex" created
    buildconfig "ruby-ex" created
    deploymentconfig "ruby-ex" created
    service "ruby-ex" created
--> Success
    Build scheduled, use 'oc logs -f bc/ruby-ex' to track its progress.
    Run 'oc status' to view your app.

# few minutes later, deploy has finished and Pod is running

[cent@dlp ~]$
oc status

In project test-project on server https://dlp.srv.world:8443

svc/ruby-ex - 172.30.76.211:8080
  dc/ruby-ex deploys istag/ruby-ex:latest <-
    bc/ruby-ex source builds https://github.com/openshift/ruby-ex.git on istag/ruby-22-centos7:latest
    deployment #1 deployed 19 seconds ago - 1 pod

View details with 'oc describe <resource>/<name>' or list everything with 'oc get all'.

[cent@dlp ~]$
oc get pods

NAME              READY     STATUS      RESTARTS   AGE
ruby-ex-1-build   0/1       Completed   0          3m
ruby-ex-2-pgd2m   1/1       Running     0          57s

[cent@dlp ~]$
oc describe service ruby-ex

Name:                   ruby-ex
Namespace:              test-project
Labels:                 app=ruby-ex
Annotations:            openshift.io/generated-by=OpenShiftNewApp
Selector:               app=ruby-ex,deploymentconfig=ruby-ex
Type:                   ClusterIP
IP:                     172.30.76.211
Port:                   8080-tcp        8080/TCP
Endpoints:              10.129.0.17:8080
Session Affinity:       None
Events:                 <none>

[cent@dlp ~]$
curl 172.30.76.211:8080


.....
.....

</head>
<body>

<section class='container'>
          <hgroup>
            <h1>Welcome to your Ruby application on OpenShift</h1>
          </hgroup>

.....
.....

</body>
</html>
[4] Enable Registry Console to use Web based UI.
# make sure routes

[origin@dlp ~]$
oc get routes

NAME             HOST/PORT                               PATH SERVICES         PORT  TERMINATION   WILDCARD
docker-registry  docker-registry-default.apps.srv.world       docker-registry  <all> passthrough   None
registry-console registry-console-default.apps.srv.world      registry-console <all> passthrough   None

# if a route [registry-console] is none on current settings, create it like follows

[origin@dlp ~]$
oc create route passthrough --service registry-console --port registry-console -n default
# create Registry Console apprication

# for [OPENSHIFT_OAUTH_PROVIDER_URL], specify the URL which is set in

# [oauthConfig] section of [/etc/origin/master/master-config.yaml]

[origin@dlp ~]$
oc new-app -n default --template=registry-console \
-p OPENSHIFT_OAUTH_PROVIDER_URL="https://dlp.srv.world:8443" \
-p REGISTRY_HOST=$(oc get route docker-registry -n default --template='{{ .spec.host }}') \
-p COCKPIT_KUBE_URL=$(oc get route registry-console -n default --template='https://{{ .spec.host }}')

--> Deploying template "openshift/registry-console" to project default

     registry-console
     ---------
     Template for deploying registry web console. Requires cluster-admin.

     * With parameters:
        * IMAGE_PREFIX=cockpit/
        * IMAGE_BASENAME=kubernetes
        * IMAGE_VERSION=latest
        * OPENSHIFT_OAUTH_PROVIDER_URL=https://dlp.srv.world:8443
        * COCKPIT_KUBE_URL=https://registry-console-default.apps.srv.world
        * OPENSHIFT_OAUTH_CLIENT_SECRET=user5WjmnJvHPAhJL8f2WopDOkcfy24R3IkHTpOn2YFiyyQcx2H8eDfr1EuuH1afHbxG # generated
        * OPENSHIFT_OAUTH_CLIENT_ID=cockpit-oauth-client
        * REGISTRY_HOST=docker-registry-default.apps.srv.world

--> Creating resources ...
    deploymentconfig "registry-console" created
    service "registry-console" created
    imagestream "registry-console" created
    oauthclient "cockpit-oauth-client" created
--> Success
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose svc/registry-console'
    Run 'oc status' to view your app.

[origin@dlp ~]$
oc get pods

NAME                       READY     STATUS    RESTARTS   AGE
docker-registry-1-95lsw    1/1       Running   0          9m
registry-console-1-xtz52   1/1       Running   0          1m
router-1-btps5             1/1       Running   1          17h

[origin@dlp ~]$
oc get routes

NAME             HOST/PORT                               PATH SERVICES         PORT   TERMINATION WILDCARD
docker-registry  docker-registry-default.apps.srv.world       docker-registry  <all>  passthrough None
registry-console registry-console-default.apps.srv.world      registry-console <all>  passthrough None
[5] Access to the URL which is assigned for Registry Console (on this example, it's [registry-console-default.apps.srv.world], it needs the client Host can run name resolution) [https://registry-console-default.apps.srv.world/], and login with any user (login form is redirected), then it's possbile to access to the registry Console.
 
Tweet